package com.jyw.router.hospital.service;

import java.util.List;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jyw.router.common.core.domain.CommonResult;
import com.jyw.router.hospital.domain.WxUser;
import com.jyw.router.hospital.domain.dto.UserTokenRedisDto;
import com.jyw.router.hospital.domain.vo.LoginMiniappVo;
import me.chanjar.weixin.mp.bean.result.WxMpUser;

/**
 * 微信用户信息Service接口
 * 
 * @author shenjun
 * @date 2023-04-19
 */
public interface IWxUserService extends IService<WxUser>
{
    /**
     * 查询微信用户信息
     * 
     * @param id 微信用户信息主键
     * @return 微信用户信息
     */
    public WxUser selectWxUserById(Long id);

    /**
     * 查询微信用户信息列表
     * 
     * @param wxUser 微信用户信息
     * @return 微信用户信息集合
     */
    public List<WxUser> selectWxUserList(WxUser wxUser);

    /**
     * 新增微信用户信息
     * 
     * @param wxUser 微信用户信息
     * @return 结果
     */
    public int insertWxUser(WxUser wxUser);

    /**
     * 修改微信用户信息
     * 
     * @param wxUser 微信用户信息
     * @return 结果
     */
    public int updateWxUser(WxUser wxUser);

    /**
     * 批量删除微信用户信息
     * 
     * @param ids 需要删除的微信用户信息主键集合
     * @return 结果
     */
    public int deleteWxUserByIds(Long[] ids);

    /**
     * 删除微信用户信息信息
     * 
     * @param id 微信用户信息主键
     * @return 结果
     */
    public int deleteWxUserById(Long id);

    /**
     * 公众号注册
     * @param wxMpUser 公众号用户关注
     */
    void registerMp(WxMpUser wxMpUser);

    /**
     * 小程序登录
     * @param loginVo
     */
    CommonResult login(LoginMiniappVo loginVo);

    /**
     * 通过小程序OpenId获取用户信息
     * @param openId
     * @return
     */
    WxUser getUserByMiniappOpenId(String openId);

    /**
     * 通过公众号OpenId获取用户信息
     * @param openId
     * @return
     */
    WxUser getUserByMpOpenId(String openId);

    /**
     * 公众号取消关注
     * @param openId
     */
    void unsubscribe(String openId);

    /**
     * 小程序注册用户
     * @param loginVo
     */
    WxUser registerMiniApp(LoginMiniappVo loginVo);

    /**
     * 获取用户缓存信息
     */
    UserTokenRedisDto getUserByToken(String token);

    /**
     * 通过手机号获取用户信息
     * @param phone
     * @return
     */
    WxUser getUserByPhone(String phone);
}
